/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package co.edu.senaclem.aspera.vista;

import co.edu.senaclem.logica.AreaLogicaLocal;
import co.edu.senaclem.logica.ClienteExternoLogicaLocal;
import co.edu.senaclem.logica.DependenciaLogicaLocal;
import co.edu.senaclem.logica.PersonalLogicaLocal;
import co.edu.senaclem.logica.TurnoLogicaLocal;
import co.edu.senaclem.logica.UsuariosLogicaLocal;
import co.edu.senaclem.modelo.Area;
import co.edu.senaclem.modelo.ClienteExterno;
import co.edu.senaclem.modelo.Personal;
import co.edu.senaclem.modelo.Turno;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author anfeles
 */
@ManagedBean(name="atencionTurnosVista")
@RequestScoped
public class AtencionTurnosVista {

    @EJB
    private DependenciaLogicaLocal dependenciaLogica;

    @EJB
    private AreaLogicaLocal areaLogica;
    
    @EJB
    private PersonalLogicaLocal personalLogica;
    
    @EJB
    private ClienteExternoLogicaLocal clienteExternoLogica;
    
    @EJB
    private TurnoLogicaLocal turnoLogica;
    
    @EJB
    private UsuariosLogicaLocal usuariosLogica;
    
    private InputText txtIdentificacion;
    private InputText txtNombre;
    private InputText txtApellido;
    private InputText txtCorreo;
    private InputText txtTelefono;
    private InputTextarea txtMotivo;
    private InputTextarea txtObservaciones;
    private InputText txtHoraIngreso;
    private InputText txtHoraSalida;
    private InputText txtEstado;
    private InputText txtTurno;
    private CommandButton btnAceptar;
    private CommandButton btnLimpiar;
    private CommandButton btnRefrescar;
    private Date fechaSistema;
    private String horaSistema; 
    private String txtArea;
    private Turno selectedTurno;
    private List<Turno> listaTurnos = null;

    public String getTxtArea() {
        txtArea=(String)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("nombreArea");
        
        return txtArea;
    }

    public void setTxtDependencia(String txtArea) {
        this.txtArea = txtArea;
    }

    public InputText getTxtTurno() {
        return txtTurno;
    }

    public void setTxtTurno(InputText txtTurno) {
        this.txtTurno = txtTurno;
    }
    
    public InputText getTxtIdentificacion() {
        return txtIdentificacion;
    }

    public void setTxtIdentificacion(InputText txtIdentificacion) {
        this.txtIdentificacion = txtIdentificacion;
    }

    public InputText getTxtNombre() {
        return txtNombre;
    }

    public void setTxtNombre(InputText txtNombre) {
        this.txtNombre = txtNombre;
    }

    public InputText getTxtApellido() {
        return txtApellido;
    }

    public void setTxtApellido(InputText txtApellido) {
        this.txtApellido = txtApellido;
    }

    public InputText getTxtCorreo() {
        return txtCorreo;
    }

    public void setTxtCorreo(InputText txtCorreo) {
        this.txtCorreo = txtCorreo;
    }

    public InputText getTxtTelefono() {
        return txtTelefono;
    }

    public void setTxtTelefono(InputText txtTelefono) {
        this.txtTelefono = txtTelefono;
    }

    public InputTextarea getTxtMotivo() {
        return txtMotivo;
    }

    public void setTxtMotivo(InputTextarea txtMotivo) {
        this.txtMotivo = txtMotivo;
    }

    public InputTextarea getTxtObservaciones() {
        return txtObservaciones;
    }

    public void setTxtObservaciones(InputTextarea txtObservaciones) {
        this.txtObservaciones = txtObservaciones;
    }

    public InputText getTxtHoraIngreso() {
        return txtHoraIngreso;
    }

    public void setTxtHoraIngreso(InputText txtHoraIngreso) {
        this.txtHoraIngreso = txtHoraIngreso;
    }

    public InputText getTxtHoraSalida() {
        return txtHoraSalida;
    }

    public void setTxtHoraSalida(InputText txtHoraSalida) {
        this.txtHoraSalida = txtHoraSalida;
    }

    public InputText getTxtEstado() {
        return txtEstado;
    }

    public void setTxtEstado(InputText txtEstado) {
        this.txtEstado = txtEstado;
    }

    public CommandButton getBtnAceptar() {
        return btnAceptar;
    }

    public void setBtnAceptar(CommandButton btnAceptar) {
        this.btnAceptar = btnAceptar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public CommandButton getBtnRefrescar() {
        return btnRefrescar;
    }

    public void setBtnRefrescar(CommandButton btnRefrescar) {
        this.btnRefrescar = btnRefrescar;
    }

    public String getFechaSistema() {
        fechaSistema = new Date();   
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        //System.out.println("La fecha de hoy es:" + sdf.format(fechaSistema));         
        return sdf.format(fechaSistema);        
        
    }

    public void setFechaSistema(Date fechaSistema) {
        this.fechaSistema = fechaSistema;
    }

    public String getHoraSistema() {
        Calendar calendario = new GregorianCalendar();
        int hora=calendario.get(Calendar.HOUR_OF_DAY);//hora formato 24 horas
        int minutos=calendario.get(Calendar.MINUTE);
        int segundos=calendario.get(Calendar.SECOND);
        horaSistema=String.valueOf(hora)+":"+String.valueOf(minutos);
        
        return horaSistema;
    }

    public void setHoraSistema(String horaSistema) {
        this.horaSistema = horaSistema;
    }

    public Turno getSelectedTurno() {
        return selectedTurno;
    }

    public void setSelectedTurno(Turno selectedTurno) {
        this.selectedTurno = selectedTurno;
    }

    public List<Turno> getListaTurnos() {
        if (listaTurnos == null) {
            try {
                System.out.println("Va a consultar los turnos");
                Area miArea=new Area();
                miArea.setCodigo((Integer)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("codigoArea"));
                setListaTurnos(turnoLogica.consultarTurnosArea(miArea,getFechaSistema()));
            } catch (Exception ex) {
                Logger.getLogger(AtencionTurnosVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listaTurnos;
    }

    public void setListaTurnos(List<Turno> listaTurnos) {
        this.listaTurnos = listaTurnos;
    }
    
    public void onRowSelect(SelectEvent event) {
        System.out.println("Selecciono el Turno");
        if (usuariosLogica.validarSesion()) {
            Turno turno = (Turno) event.getObject();    
            txtTurno.setValue(String.valueOf(turno.getNumero()));            
            txtIdentificacion.setValue(turno.getDocumentoCliente().getDocumento().getDocumento());
            txtNombre.setValue(turno.getDocumentoCliente().getDocumento().getNombre());
            txtApellido.setValue(turno.getDocumentoCliente().getDocumento().getApellido());
            txtCorreo.setValue(turno.getDocumentoCliente().getDocumento().getCorreo());
            txtTelefono.setValue(turno.getDocumentoCliente().getDocumento().getTelefono());            
            txtEstado.setValue(turno.getEstado());
            txtHoraIngreso.setValue(turno.getHoraIngreso());
            if(turno.getHoraSalida().equals(""))
                txtHoraSalida.setValue(getHoraSistema());
            else
                txtHoraSalida.setValue(turno.getHoraSalida());  
            
            txtMotivo.setValue(turno.getMotivo());                   
            txtObservaciones.setValue(turno.getObservaciones());
            //se guarda el PK del turno en sesion para poderlo modificar
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("codigoTurno", turno.getCodigo());
            btnAceptar.setDisabled(false);    
            
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(AtencionTurnosVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    public void limpiar_action() {

        System.out.println("Limpiar turno");
        txtIdentificacion.setValue("");
        txtNombre.setValue("");
        txtApellido.setValue("");
        txtTelefono.setValue("");
        txtCorreo.setValue("");
        txtTurno.setValue("");
        txtMotivo.setValue("");
        txtEstado.setValue("");
        txtHoraIngreso.setValue("");
        txtHoraSalida.setValue("");
        txtObservaciones.setValue("");       
        btnAceptar.setDisabled(true);
        setListaTurnos(null);
        
    }
    
    public void actualizarTurno_action() {
        System.out.println("Actualizar Turno");

        try {
            Turno miTurno = new Turno();
            int codigoTurno=(Integer)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("codigoTurno");
            miTurno.setCodigo(codigoTurno);            
            
            /*Long docPersonal = Long.parseLong(txtIdentificacion.getValue().toString());
            Personal nuevoPersonal = new Personal();
            nuevoPersonal.setDocumento(docPersonal);
            nuevoPersonal.setNombre(txtNombre.getValue().toString().toUpperCase());
            nuevoPersonal.setApellido(txtApellido.getValue().toString().toUpperCase());
            nuevoPersonal.setCorreo(txtCorreo.getValue().toString());
            nuevoPersonal.setTelefono(txtTelefono.getValue().toString());
            
            ClienteExterno nuevoClienteExterno=new ClienteExterno();
            nuevoClienteExterno.setDocumento(nuevoPersonal);*/
                                   
            /*Integer area = Integer.parseInt(getCmbArea().getValue().toString());
            Area areaFunc = areaLogica.consultarPorId(area);*/
            
            //miTurno.setDocumentoCliente(nuevoClienteExterno);
            //nuevoTurno.setArea(areaFunc);
            miTurno.setEstado("ATENDIDO");
            
            /*SimpleDateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd");
            Date fecha = formatoFecha.parse(getFechaSistema());
            miTurno.setFecha(fecha);//            
            miTurno.setHoraIngreso(txtHoraIngreso.getValue().toString());*/
            miTurno.setHoraSalida(txtHoraSalida.getValue().toString()); 
            //miTurno.setMotivo(txtMotivo.getValue().toString());          
            miTurno.setObservaciones(txtObservaciones.getValue().toString());

            turnoLogica.modificar(miTurno);
            limpiar_action();
            
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "El Turno Ha Sido Atendido"));
            
        } catch (NumberFormatException nfe) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error ", "Número de Documento Inválido"));
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
        }
        setListaTurnos(null);

    }
    
}
